/*
 * ICourseTeachersList.h
 *
 *  Created on: 9 May 2010
 *      Author: Savramis Sartios
 */

#ifndef ITEACHERSCODESLIST_H_
#define ITEACHERSCODESLIST_H_
#include <string>
#include <vector>
#include <map>
using namespace std;
#include "../Iterator/ICourseTeachersIterator.h"

class ICourseTeachersList{
public:

	/**
	 * Επιστρέφει έναν Iterator για την προσπέλαση των στοιχειών του map
	 * \return ITeachersCodesListIterator o iterator της λίστας
	 */
	virtual ICourseTeachersIterator * getIterator()=0;

	/**
	 * Επιστρέφει το μέγεθος της δομής αποθήκευσης
	 * \return int το μέγεθος
	 */
	virtual int count()const=0;

/*
	*
	 * Επιστρέφει τους καθηγητές που διδάσκουν ένα συγκεκριμένο μάθημα
	 * \param const string *courseCode	το μάθημα
	 * \return vector<string *> τους κωδικούς των καθηγητών που διδάσκουν το μάθημα

	virtual vector<string *> * getTeachers(const string *courseCode)const=0;
*/

	/**
	 * Προσθέτει τους κωδικούς των καθηγητών ενός μαθήματος στην δομή αποθήκευσης
	 * \param const string *courseCode ο κωδικός του μαθήματος
	 * \param const vector<string*> *teachers οι κωδικοί των καθηγητών
	 * \return bool true εάν η καταχώρηση έγινε με επιτυχία
	 */
	virtual bool	add(const string *courseCode,const vector<string*> *teachers)=0;

	/**
	 * Επιστρέφει την αρχή της δομής αποθήκευσης
	 * \return iterator προς την δομή
	 */
	virtual map<string*,vector<string*> *>::iterator getStart()=0;

	/**
	 * Επιστρέφει τον αριθμό των καθηγητών του μαθήματος
	 */
	virtual int countTeachers(const string *courseCode)=0;
};

#endif /* ITEACHERSCODESLIST_H_ */
